package 哈希表;

import java.util.HashMap;
import java.util.Map;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/3/8 19:51
 */
public class leetcode525连续数组 {
    /*
    这个题 有点抽象!
    很容易分析错
     */

    public int findMaxLength(int[] nums) {
        // 将 0 看成-1 1 看成1 其实就是在求 子数组和 为0 的最长子数组的和
        Map<Integer,Integer> map =  new HashMap<>();
        int sum = 0,ans = 0;
        for(int i = 0;i < nums.length;i++){
            sum += nums[i] == 0 ? -1 : 1;
            if(sum == 0){
                ans = Math.max(i + 1,ans);
            }
            if(map.containsKey(sum)){
                ans = Math.max(i - map.get(sum),ans);
            }else{
                map.put(sum,i);
            }
        }
        return ans;
    }
}
